
#include "conf.h"

int leerConfig(const char *arch, struct Parametros *parametros)
{
	char *ptr, cadena[80+1], campo[80+1];
	FILE *fd;

	if ((fd = fopen(arch, "r")) == NULL)
	{
		printf ("\nERROR AL ABRIR PARA LECTURA EL ARCHIVO %s !!!!!\n", arch);
		return 0;
	}

	while (fgets(cadena, 80+1, fd) != NULL) {

		if (cadena[0] != '#' && cadena[0] != '\n')
		{
			cadena[strlen(cadena)-1] = '\0';
			ptr = strtok (cadena, ":" );
			while ( ptr != NULL )
			{
				strcpy(campo,ptr);
				ptr = strtok (NULL,":");
				if ( ptr == NULL )
				{
					printf("\nERROR NO HAY NINGUN DATO EN EL CAMPO %s !!!!!\n",campo);
					return 0;
				}

				if (cargarParametros(parametros, ptr, campo) == 1){
					printf("No se cargó el parámetro %s\n",campo);
					return 0;
				}


				ptr = strtok ( NULL, ":\0" );
			}
		}
	}

	fclose(fd);
   return 1;
}


/******************************************************************************
* FUNCION: cargarParametros()																	*
* DESCRIP: 	-Verifica el valor del parametro en el archivo de configuracion	*
*				-Inicializa la estructura de parametros									*
* DEVUELVE: Si no carga el parametro 1, si lo carga 0									*
******************************************************************************/

int cargarParametros(struct Parametros *parametros, char *dato, char *campo)
{
	struct in_addr ftp_addr;

	if (strcmp(campo, "IP") == 0) {

      /* Guarda la IP en la estructura ... */
		if(strcmp(dato,"INADDR_ANY") == 0)
			parametros->Addr.s_addr=htonl(INADDR_ANY);
		else {
			if(!inet_aton(dato,(struct in_addr *)&ftp_addr)) {
				printf("Error en IP de Habitacion!\n");
				return 1;
			}
		}

		parametros->Addr = ftp_addr;
		return 0;
	}

	if (strcmp(campo, "PORT") == 0) {

		parametros->port = htons(atoi(dato));
		return 0;
	}

	if (strcmp(campo, "CANT_CONEXIONES") == 0) {

		parametros->max_conexiones = atoi(dato);
		return 0;
	}

	if (strcmp(campo, "CACHE_SIZE") == 0) {

			parametros->tamanio_cache = atoi(dato) * 1024;
			return 0;
	}

	 if (strcmp(campo, "LOGFILE") == 0) {
		parametros->log=dato[0];
		return 0;
   }

	/* Si llega hasta aca hay algun error ... */
	printf("Parametro Desconocido...\nVerifique su archivo de Configuracion\n");
   return 1;
}

